# encoding: utf-8
"""
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    created by lane.chang on '11/10/2024'
    comment: 节点智能交互
"""
import re
from datetime import datetime
import asyncio

import ujson

from project.model.basic import User, Knowledge
from project.service.agents.agent import Agent
from project.model.flow import Flow, Parameter
from project.service.common import CommonService
from project.service.knowledge import KnowledgeService


class Interaction:
    """
    """
    @staticmethod
    async def policy(user: User, user_message, flow: Flow, knowledge: Knowledge = None, chat_model_name='', agent_profile='', user_role='', session=None):
        """
        :param user:
        :param user_message:
        :param flow:
        :param knowledge:
        :param chat_model_name:
        :param agent_profile:
        :param user_role:
        :return:
        """
        # 服务流程详情
        retrieved_service = {
            'service_name': flow.title,
            'service_description': flow.description,
            'matching_intent': flow.matching_intent,
            'SOP': flow.sop
        }

        # 参数列表
        retrieved_service_params = flow.parameters

        # 掌握的背景知识
        # related_knowledge = KnowledgeService.retrieve(session, user_message, knowledge.key if knowledge else '')
        data = await KnowledgeService.get_knowledge_match_list(session, user_message, organization_code=knowledge.key if knowledge else '')
        related_knowledge = [v['text'] for v in data]

        prompt = """
        ###Instruction    
        {agent_profile}，你服务于房间中的{user_role}。请结合你掌握的背景知识、当前正在提供服务的信息以及你和{user_role}的对话历史。
        Solve this task with interleaving Thought, Response, Action, steps. 
        Thought: can reason about the current situation. 请保持 思想,Thought 与 回复,Response 还有 Action, 跳转节点 的一致性。
        Action:  是该服务当前需要给用户呈现的页面节点，对应service sop中的对应节点编号。 
        Response: 是你回复用户的内容。不超过50个字。

        请根据你和{user_role}的对话，判断{user_role}需要什么样的服务，以及服务详情，输出一对[Thought],[Action]以及[Response]。
        注意！！！当{user_role}提出的要求超出可选择内容范围时，应礼貌的告知{user_role}不可选。
        你们的对话历史：{user_memories} 

        针对这段对话你所掌握的背景知识为：{related_knowledge} 

        你所提供服务的相关信息：{retrieved_service} 
        
        该服务对应的{user_role}可选择内容为：{retrieved_service_params} 
        
        输出格式要求：
        Thought: （这里是你的推理过程，这里主要依赖最新观察，同时也参考对话历史，以及你所提供服务的相关信息来思考。）
        Response: 你对{user_role}说："(这里是你具体对{user_role}回复的话，请注意与你的Thought与Action是保持一致的，不能有猜想的幻觉。)"
        Action: （这里是接下来要为{user_role}提供的服务的页面节点编号）


        以下是一些输出错误的例子：
        Thought: 根据对话历史，{user_role}已经选择了肉酱空心面，现在又确认需要一份冰冻果汁。我需要确认冰冻果汁的规格，并询问{user_role}是否还有其他需求。
        Response: 你对{user_role}说："已为您点了1份肉酱空心面和1份冰冻果汁。您还有别的需要的吗？"
        Action: node_001
        错误原因分析：既然你的Thought提到的"我需要确认冰冻果汁的规格，"，那么就应该针对冰冻果汁的规格对客户发起询问。


        Thought: 根据对话历史，{user_role}已经点了1份青菜粥、3份白粥和1份热干面，并且表示没有其他需要。现在{user_role}回复"不需要"，说明{user_role}已经完成了点餐，不需要再提供其他服务。
        Response: 你对{user_role}说："好的，已为您点了1份青菜粥、3份白粥和1份热干面。请核对信息后点击或告知我‘确认下单’。"        
        Action: node_002
        错误原因分析：{user_role}说"不需要"是指已经点好菜了，接下来按照该服务的标准作业流程（SOP）所示，接下来应该询问用户配送时间。
        
        
        Here are some examples:
        Thought: {user_role}应该是需要吃点东西。
        Response: 你对{user_role}说："您好，欢迎使用怡养智能送餐服务，以下是餐厅的自选菜单，请选购"
        Action: node_001


        ###Output
        """
        agent = Agent(user, user_message, business_name='policy处理', chat_model_name=chat_model_name, agent_profile=agent_profile, user_role=user_role)
        res = await agent.async_interact(prompt=prompt, related_knowledge=related_knowledge, retrieved_service=retrieved_service, retrieved_service_params=retrieved_service_params)
        res = res.replace('：', ':').split("\n")

        response = ''
        node_code = ''
        for idx, l in enumerate(res):
            if l.startswith('Action:'):
                node_code = l.replace('Action:', '').strip()
                # 类似于 node_002077
                if '_' in node_code:
                    node_code = node_code.split('_')[1]
            elif l.startswith('Response:'):
                response = l.replace('Response:', '')

                # 匹配 你对xxx说:
                pattern = r"你对(.+?)说:"
                match = re.search(pattern, response)
                if match:
                    response = response.replace(match.group(0), '')

        ret_data = {
            'response': response,
            'intent': 'service',
            'node_code': node_code.replace('"', '')
        }

        return ret_data

    @staticmethod
    async def dst(user: User, response, flow: Flow, chat_model_name='', agent_profile='', user_role=''):
        """
        :param user:
        :param response:
        :param flow:
        :param chat_model_name: 模型名称
        :param agent_profile:
        :param user_role:
        :return:
        """
        # 参数列表
        service_params = flow.parameters
        formatted_now = datetime.now().strftime('%Y年%m月%d日 %H:%M:%S')

        prompt = """
        ###Instruction
        根据你和{user_role}的对话记录，从当前服务可选参数列表中找出被{user_role}改变了值的选项，并输出选项及选中的值。请严格按照"输出格式要求"进行输出。注意你不能编造参数名称，参数名称只能来自"当前服务可选参数列表"。
        注意：有一些值的选项是枚举值，只能用"可选项"中的项与{user_role}需求进行匹配，如果"可选项"列表中不存在的则不输出。

        ### 当前时间为：{formatted_now}
        
        ### 参数值类型说明与举例：
        1. 当参数的"参数值类型"为 "列表" 型，则输出的参数格式举例:
        假设"当前服务可选参数列表"为以下时：
        [
            {{
                "参数名称": "选餐列表",
                "参数描述": "用于展示给{user_role}选择的菜品,根据用户的选择或者对话更新选择规格中的信息。",
                "参数详情": [
                  {{
                    "分类名": "早餐",
                    "有效时间": "7:00-11:00",
                    "可选列表": [
                      {{
                        "名称": "冰冻果汁",
                        "规格": {{
                          "自选果汁": {{
                            "可选项": ["橙汁", "苹果汁", "葡萄汁"],
                            "当前选中": "无"
                          }}
                        }},
                        "数量": {{"数量上限": 100, "当前选中": 0}},
                        "价格": 15.0
                      }},
                      {{
                        "名称": "原味米浆",
                        "规格": {{}},
                        "数量": {{"数量上限": 100, "当前选中": 0}},
                        "价格": 8.0
                      }},
                      {{
                        "名称": "百事可乐",
                        "规格": {{}},
                        "数量": {{"数量上限": 100, "当前选中": 0}},
                        "价格": 15.0
                      }}
                      ...(more)...
                      ]
                ]
            }}
        ]
        可以被输出的格式为：{{"参数名称": "选餐列表", "参数列表": [{{"分类名": "早餐", "名称": "冰冻果汁", "规格": {{"自选果汁": "橙汁"}}, "数量": 1}}, {{"分类名": "早餐", "名称": "冰冻果汁", "规格": {{"自选果汁": "葡萄汁"}}, "数量": 1}}, {{"分类名": "早餐", "名称": "原味米浆", "规格": {{}}, "数量": 1}}, {{"分类名": "早餐", "名称": "百事可乐", "规格": {{}}, "数量": 1}}]}}
        以上针对针对同一个名称"冰冻果汁"点了不同的规格（既有橙汁，又有葡萄汁）所以各自独立为一项，不合并在一起记录。

        2. 当参数的"参数值类型"为 "单项" 型，则输出的参数格式举例:
        假设"当前服务可选参数列表"为以下时：
        {{
                "参数名称": "送餐时间",
                "参数描述": "{user_role}选择的送餐时间，即什么时候送餐到{user_role}的房间，根据用户的选择或者对话更新选择规格中的信息。",
                "参数值类型": "单项",
                "参数详情": {{
                  "日期": {{"可选项": ["今日", "明日"], "当前选中": "今日"}},
                  "时间": {{
                    "可选项": "只能选7:00-22:00时间内",
                    "当前选中": "10:30"
                  }}
                }}
        }}
        可以被输出的格式为：{{"参数名称": "送餐时间", "日期":"今日", "时间":"21:00"}}

        ### 输出格式要求：
        注意，所有被选中的参数都添加到"选中参数列表"中进行输出，对所有参数的推理，都放在"推理"中逐项列出，'推理'不要超过50个字。
        注意：输出给是为以python json.loads() 可以加载的json格式，值用双引号包裹，不要有额外的信息，因为要直接用json.loads()加载，中间不要输出空格或者换行，全部合并成一行输出，所有引号都用双引号。
        比如：{{\"推理\": \"{user_role}明确表示需要矿泉水，未提及数量，默认为1瓶。\", \"选中参数列表\": [{{\'参数名称\': \'物品配送\', \'参数列表\': [{{\'名称\': \'矿泉水\', \'数量\': 1}}]}}]}} 这样输出有单引号无法被解析，要改为：{{\"推理\": \"{user_role}明确表示需要矿泉水，未提及数量，默认为1瓶。\", \"选中参数列表\": [{{\"参数名称\": \"物品配送\", \"参数列表\": [{{\"名称\": \"矿泉水\", \"数量\": 1}}]}}]}}
        注意：返回的json格式要完整。
        比如：{{\"推理\": \"{user_role}提供了手机尾号后四位并确认下单，因此选中了{user_role}提供的手机号尾号。\", \"选中参数列表\": [{{\"参数名称\": \"手机号(后四位)\", \"手机号(后四位)\": \"1234}}]}} 这个输出并不完整，最后键值对，\"手机号(后四位)\": \"1234，缺少了末尾的\"，应该改为：{{\"推理\": \"{user_role}提供了手机尾号后四位并确认下单，因此选中了{user_role}提供的手机号尾号。\", \"选中参数列表\": [{{\"参数名称\": \"手机号(后四位)\", \"手机号(后四位)\": \"1234\"}}]}} 
        注意：输出参数的组装格式要遵循\"\"\"参数值类型说明与举例：\"\"\"
        比如：{{\"推理\": "{user_role}明确选择了现在送一份白粥，未提及具体时间，默认为当前服务时间内的送餐。\",\"选中参数列表\": [{{\"参数名称\": \"选餐列表\", \"参数列表\": [{{\"分类名\": \"早餐\", \"名称\": \"白粥\", \"数量\": 1}}],\"送餐时间\": {{\"日期\": \"今日\", \"时间\": \"14:33\"}}}}]}}这段输出格式就不符合'''参数值类型说明与举例：'''中的定义，正确的格式为：{{\"推理\": "{user_role}明确选择了现在送一份白粥，未提及具体时间，默认为当前服务时间内的送餐。\",\"选中参数列表\": [{{\"参数名称\": \"选餐列表\", \"参数列表\": [{{\"分类名\": \"早餐\", \"名称\": \"白粥\", \"数量\": 1}}]}},{{\"参数名称\": \"送餐时间\", \"日期\": \"今日\", \"时间\": \"14:33\"}}]}}
        1. 当前存在被选中参数时：
        {{
            "推理": "...你的推理过程...", 
            "选中参数列表": [{{'参数名称':<具体参数名称>, ......}}]
        }}
        
        2. 当前不存在被选中参数时：
        {{ 
            "推理": "...你的推理过程...", 
            "选中参数列表": []
        }}
    
        ### 当前你提供的服务名称为：{service_name}
        
        ### 当前服务可选参数列表:{service_params}

        ### 你和{user_role}的对话记录：{user_memories}
        注意对话记录编号，编号越大距离当前时间越近，也就是越新的信息，如果信息之间存在冲突，以新信息为准。

        ###Output
        """
        agent = Agent(user, user_message='', business_name='dst处理', chat_model_name=chat_model_name, agent_profile=agent_profile, user_role=user_role)
        response = await agent.async_interact(prompt=prompt,
                                              response=response,
                                              service_name=flow.title,
                                              service_params=service_params,
                                              formatted_now=formatted_now)

        response = CommonService.llm_response_handler(response.replace('```json', '').replace('\n', '').replace('```', ''))
        if "选中参数列表" in response.keys():
            return response['选中参数列表']
        else:
            print("[ERROR] dst parsing error.")

        return response


async def main():
    """
    :return:
    """
    user = User()
    # user_message = '来一份意大利面'
    user_message = '来一杯热巧克力'
    anget = Agent(user, user_message)
    # anget.init_user_memories()  # 清空上下文

    flow = Flow()
    flow.title = '订餐服务'
    flow.description = '为用户提供的订餐、送餐服务'
    flow.matching_intent = '用户想预订餐食送上门，比如预订早餐、中餐然后送进房间。'
    flow.sop = "1）首先如果用户表达了想点餐的意愿，则告知用户欢迎语并提醒用户自选菜品，比如：\"您好，欢迎使用怡养智能送餐服务，以下是餐厅的自选菜单，请选购\"，对应节点\"node_001\",；2）用户点了一个吃的以后，你需要将用户点的东西与\"选餐列表\"对一对，如果不在\"选参列表\"中则告知用户不可选，对应节点\"node_001\"。3） 的范围内，客人只能选\"选参列表\"中的食物。如果存在，接着你会询问对方是否选餐完毕，是否还要选其他的？比如：\"good choice! 还要别的吗？\",，对应节点\"node_001\",；3）用户明确表示他已经选择完毕，确定点什么餐，不再需要其他的了。这个时候你接着你会询问对方对方什么时候送餐方便，并且复述用户已经选购的餐食，比如：\"您刚才选购的餐食是xxxxx(这里你从自己记忆里回忆用户选了啥来填充），然后您希望几点送餐到您房间呢？请选择配送时间段。\",，对应节点\"node_002\",；4）接着等对方告知或选择送餐上门的时间后，告知对方已为对方生成预约维修的订单，并询问对方是否确认下单，比如：\"已为您生成订单，请核对清楚后，点击“确认下单”点击或和我说“确认下单”\"，对应节点\"node_003\"；4）对方表达订单信息无误或者回复确认下单的意思后，告知已为用户下单，请对方耐心等待，比如：\"已为您下单，请耐心等待\"，对应节点\"node_004\"；5）如果客人表达的内容超出了当前服务的范围，或者客人开始暴躁有要投诉的倾向了，告知客人转人工，对应节点\"node_404\"。"

    parameters = []
    parameter = Parameter()
    parameter.title = '选餐列表'
    parameter.description = '用于展示给用户选择的菜品，根据用户的选择或者对话更新选择规格中的信息。'
    parameter.detail = [
            {
                "参数名称": "选餐列表",
                "参数描述": "用于展示给用户选择的菜品,根据用户的选择或者对话更新选择规格中的信息。",
                "参数值类型": "列表",
                "参数详情": [
                    {
                        "分类名": "早餐",
                        "有效时间": "00:00-23:59",
                        "可选列表": [
                            {
                                "名称": "美式早餐",
                                "规格": {
                                    "自选面包": {
                                        "可选项": [
                                            "丹麦包",
                                            "牛角包",
                                            "马芬",
                                            "白吐司"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选谷物": {
                                        "可选项": [
                                            "玉米片",
                                            "可可米",
                                            "无麦麸麦片",
                                            "甜甜圈（配谷物）",
                                            "甜玉米片"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选果汁": {
                                        "可选项": [
                                            "橙汁",
                                            "苹果汁",
                                            "葡萄汁",
                                            "时令水果盘"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选热饮": {
                                        "可选项": [
                                            "热巧克力",
                                            "咖啡",
                                            "英式早餐茶",
                                            "绿茶"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "鸡蛋做法": {
                                        "可选项": [
                                            "煎蛋",
                                            "炒蛋",
                                            "水煮蛋",
                                            "水波蛋",
                                            "蛋卷"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "鸡蛋配料": {
                                        "可选项": [
                                            "土豆饼",
                                            "香草扒番茄",
                                            "培根",
                                            "早餐肠仔"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 138.0
                            },
                            {
                                "名称": "欧陆式早餐",
                                "规格": {
                                    "自选面包": {
                                        "可选项": [
                                            "丹麦包",
                                            "牛角包",
                                            "马芬",
                                            "白吐司",
                                            "黄油"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选谷物": {
                                        "可选项": [
                                            "玉米片",
                                            "可可米",
                                            "无麦麸麦片",
                                            "甜甜圈（配谷物）",
                                            "甜玉米片"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选果汁": {
                                        "可选项": [
                                            "橙汁",
                                            "苹果汁",
                                            "葡萄汁",
                                            "时令水果盘"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选热饮": {
                                        "可选项": [
                                            "热巧克力",
                                            "咖啡",
                                            "英式早餐茶",
                                            "绿茶"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选酸奶": {
                                        "可选项": [
                                            "原味酸奶",
                                            "果味酸奶"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 115.0
                            },
                            {
                                "名称": "天然健康早餐",
                                "规格": {
                                    "自选果汁": {
                                        "可选项": [
                                            "橙汁",
                                            "苹果汁",
                                            "葡萄汁",
                                            "时令水果盘"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "天然健康早餐": {
                                        "可选项": [
                                            "时令水果盘",
                                            "牛油果蛋白卷"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 138.0
                            },
                            {
                                "名称": "中式早餐",
                                "规格": {
                                    "自选果汁": {
                                        "可选项": [
                                            "橙汁",
                                            "苹果汁",
                                            "葡萄汁",
                                            "时令水果盘"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选热饮": {
                                        "可选项": [
                                            "热巧克力",
                                            "咖啡",
                                            "英式早餐茶",
                                            "绿茶"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "自选粥类": {
                                        "可选项": [
                                            "白粥",
                                            "鸡肉粥",
                                            "姜丝鱼片粥",
                                            "皮蛋瘦肉粥"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 125.0
                            },
                            {
                                "名称": "白粥",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "青菜粥",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "姜丝鱼片粥",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "鸡肉粥",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "皮蛋瘦肉粥",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "新鲜包点",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                }
                            },
                            {
                                "名称": "武汉热干面",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 55.0
                            },
                            {
                                "名称": "水果沙拉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "燕麦粥",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 66.0
                            },
                            {
                                "名称": "瑞士冻麦片",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 65.0
                            },
                            {
                                "名称": "早餐谷物",
                                "规格": {
                                    "自选谷物": {
                                        "可选项": [
                                            "玉米片",
                                            "可可米",
                                            "无麦麸麦片",
                                            "甜甜圈（配谷物）",
                                            "甜玉米片"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                }
                            },
                            {
                                "名称": "经典煎饼",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 55.0
                            },
                            {
                                "名称": "华夫饼",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 55.0
                            },
                            {
                                "名称": "牛油果蛋白卷",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 108.0
                            },
                            {
                                "名称": "自选双蛋",
                                "规格": {
                                    "鸡蛋做法": {
                                        "可选项": [
                                            "煎蛋",
                                            "炒蛋",
                                            "水煮蛋",
                                            "水波蛋"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "鸡蛋配料": {
                                        "可选项": [
                                            "土豆饼",
                                            "香草扒番茄",
                                            "培根",
                                            "早餐肠仔"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "鲜蓝莓",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 108.0
                            }
                        ]
                    },
                    {
                        "分类名": "午餐",
                        "有效时间": "00:00-23:59",
                        "可选列表": [
                            {
                                "名称": "冰冻果汁",
                                "规格": {
                                    "冰冻果汁": {
                                        "可选项": [
                                            "橙汁",
                                            "苹果汁",
                                            "葡萄汁"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 15.0
                            },
                            {
                                "名称": "原味米浆",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 8.0
                            },
                            {
                                "名称": "百事可乐",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 15.0
                            },
                            {
                                "名称": "轻食鸡肉沙拉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "红烧牛腩面",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "传统意大利面",
                                "规格": {
                                    "意面的酱料": {
                                        "可选项": [
                                            "肉酱",
                                            "茄汁",
                                            "奶油芝士"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "意面种类": {
                                        "可选项": [
                                            "意面",
                                            "空心面",
                                            "宽面"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "阿图斯佳美娜红葡萄酒",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "盛宴牛肉汤面",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 27.0
                            },
                            {
                                "名称": "盛宴牛肉汉堡",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 39.0
                            },
                            {
                                "名称": "盛宴牛肉汉堡+韩式炸鸡4块",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 49.0
                            },
                            {
                                "名称": "七喜",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 15.0
                            },
                            {
                                "名称": "美年达",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 15.0
                            },
                            {
                                "名称": "卤猪耳",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "卤猪手",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "卤牛肚",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "套餐A（牛肉）",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "套餐B（猪手）",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 54.0
                            },
                            {
                                "名称": "烟熏三文鱼配酸奶油",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "鄂式风味牛肉沙拉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 88.0
                            },
                            {
                                "名称": "净煮鸡胸配柠檬油醋汁",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 68.0
                            },
                            {
                                "名称": "蔬菜田园沙拉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "汉味苦菊沙拉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "凉拌毛豆",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "牛肝菌奶油汤",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "樱桃番茄汤",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "牛肉奶酪汉堡配薯条",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "熏肉奶酪汉堡配薯条",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "奶酪汉堡配薯条",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "传统海南鸡饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 128.0
                            },
                            {
                                "名称": "港式鲜虾云吞面",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "汉街特色炒饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "特薄紫苏酱披萨",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "烟熏三文鱼披萨",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 138.0
                            },
                            {
                                "名称": "夏威夷披萨",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 98.0
                            },
                            {
                                "名称": "英式香脆鱼柳",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 168.0
                            },
                            {
                                "名称": "烤羊排",
                                "规格": {
                                    "成熟度": {
                                        "可选项": [
                                            "全熟"
                                        ],
                                        "当前选中": "无"
                                    },
                                    "扒类酱汁": {
                                        "可选项": [
                                            "黑椒汁",
                                            "蘑菇汁",
                                            "红酒汁"
                                        ],
                                        "当前选中": "无"
                                    }
                                },
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 198.0
                            },
                            {
                                "名称": "柠檬芝士蛋糕",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "黑森林蛋糕",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 66.0
                            },
                            {
                                "名称": "卡布奇诺提拉米苏",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 88.0
                            },
                            {
                                "名称": "芒果布丁",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 66.0
                            },
                            {
                                "名称": "孝感米酒冻配麻糖",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 66.0
                            },
                            {
                                "名称": "新鲜时令水果盘",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "冰淇淋（45.00/球）",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 45.0
                            },
                            {
                                "名称": "汤力水",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 35.0
                            },
                            {
                                "名称": "苏打水",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 35.0
                            },
                            {
                                "名称": "依云水",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 45.0
                            }
                        ]
                    },
                    {
                        "分类名": "晚餐",
                        "有效时间": "00:00-23:59",
                        "可选列表": [
                            {
                                "名称": "香辣牛蛙配米饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "浓香酱大骨炖柴火豆腐配米饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "玛格丽特披萨",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 68.0
                            },
                            {
                                "名称": "鲍鱼捞饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 20.0
                            },
                            {
                                "名称": "烤鸡翅中6个",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 28.0
                            },
                            {
                                "名称": "烤西冷配黑椒汁4块",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "法式羔羊排配黑椒汁2块",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "精选凉菜拼盘",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "捞汁小海鲜",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "什锦寿司8个",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "西班牙火腿配蜜瓜卷",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "香肠烤肉披萨",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 68.0
                            },
                            {
                                "名称": "馋嘴猪手",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 69.0
                            },
                            {
                                "名称": "蒜汁牛肉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "桂花汁浸圣女果",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 39.0
                            },
                            {
                                "名称": "爽口酱萝卜",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "四川口水鸡",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 69.0
                            },
                            {
                                "名称": "脆皮乳鸽",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "密制烧鹅仔",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 168.0
                            },
                            {
                                "名称": "鲜菌炖花胶",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 299.0
                            },
                            {
                                "名称": "采悦轩特色炒饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 138.0
                            },
                            {
                                "名称": "飘香鲍鱼捞饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 58.0
                            },
                            {
                                "名称": "水晶虾皇饺3只",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 48.0
                            },
                            {
                                "名称": "酱油炒饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 38.0
                            },
                            {
                                "名称": "白米饭",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 5.0
                            },
                            {
                                "名称": "小炒湖湘嫩仔羊",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 168.0
                            },
                            {
                                "名称": "干锅秋笋尖",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 138.0
                            },
                            {
                                "名称": "经典辣椒炒肉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 88.0
                            },
                            {
                                "名称": "大碗娃娃菜",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 78.0
                            },
                            {
                                "名称": "宫爆雪花牛肉",
                                "数量": {
                                    "上限": 100,
                                    "当前选中": 0
                                },
                                "单价": 188.0
                            }
                        ]
                    }
                ]
            },
            {
                "参数名称": "送餐时间",
                "参数描述": "让用户选择送餐时间",
                "参数值类型": "单项",
                "参数详情": {
                    "日期": {
                        "可选项": [
                            "今日",
                            "明日",
                            "后日"
                        ],
                        "当前选中": "无"
                    },
                    "送餐时间": {
                        "可选项": "只能选择07:00-21:00时间内",
                        "格式": "时:分, 比如19:00",
                        "当前选中": ""
                    }
                }
            }
        ]
    parameters.append(parameter)

    parameter = Parameter()
    parameter.title = '送餐时间'
    parameter.description = '用户选择的送餐时间，即什么时候送餐到客人的房间，根据用户的选择或者对话更新选择规格中的信息。'
    parameter.detail = {
        "选择规格": {
            "时间": {"可选项": "只能选当天的24小时时间", "当前选中": '无'},
        }
    }
    parameters.append(parameter)
    flow.parameters = parameters

    now = datetime.now()
    response, action_type, node = await Interaction.policy(user, user_message, flow)

    formatted_time = now.strftime('%Y%m%d%H%M%S')
    anget.add_user_memories('对话序号:' + formatted_time + "\t\t客人对你说:" + user_message)
    anget.add_user_memories('对话序号:' + formatted_time + "\t\t你对客人说:" + response)
    result = await Interaction.dst(user, response, flow)

    print(ujson.dumps(result, ensure_ascii=False, indent=4))


if __name__ == "__main__":

    asyncio.run(main())
